有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OpenSessionView和commit事务

我正在使用Hibernate、Spring和JSF

为了防止LazyInitializationException,我使用

<bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
        <property name="sessionFactory" ref="sessionFactory"/>
        <property name="singleSession" value="true"/>
</bean>

在myDAO中,我定义了方法:

public Collection<T> findAll() {
        Session session = getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        return 
            session.createCriteria( persistentClass 
                    ).setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY
                            ).list();
    }

我这样称呼这个方法:

@Transactional( readOnly = false, propagation = Propagation.SUPPORTS )
    public Collection<MyData> getMyData() {
        return (Collection<MyData>) myDAO.findAll();
    }

在本例中,我使用了Spring事务。我需要在findAll方法中的Transaction tx = session.beginTransaction(); and tx.commit()?中启动事务吗

我正在使用Oracle 10g


共 (1) 个答案

  1. # 1 楼答案

    当使用@Transactional(您有一个名为transactionManager的bean,并且有<tx:annotation-driven />)时,您不需要手动处理事务